package com.example.administrator.activitytest;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("FirstActivity","Task id is " + getTaskId());
        setContentView(R.layout.first_layout);
        Button button1 = (Button)findViewById(R.id.button_1);
        //在活动中，可以通过findViewById()方法获取到在布局文件中定义的元素，这里
        //我们传入的R.id.button_1，来获得按钮的实例，这个值是刚才在first_layout.xml中通过
        //android:id属性指定的。而findViewById()方法返回的是一个View对象，我们需要向下转型
        //将它转成Button对象。得到按钮的实例之后，我们通过调用setOnClickListener()方法为按钮注册一个
        //监听器，点击按钮时就会执行监听器中的onClick()方法。因此，弹出的Toast的功能当然要在onClick()方法中编写了。
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(intent);
                //这里我们使用了startActivityForResult()方法来启动SecondActivity,请求码只是一个唯一值就可以了

               // String data = "Hello SecondActivity";
                //Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                //intent.putExtra("extra_data",data);
                //这里我们还是使用显示Intent的方式来启动SecondActivity,并通过putExtra()方法传递了一个字符串
                //注意这里putExtra()方法接受两个参数，第一个参数是键，用于后面从Intent中取值，第二个参数才是真正
                //要传递的数据
                //Intent intent = new Intent(Intent.ACTION_DIAL);
                //intent.setData(Uri.parse("tel:10086"));

                //Intent intent = new Intent(Intent.ACTION_VIEW);
                //intent.setData(Uri.parse("http://www.baidu.com"));
                //这里我们首先指定了Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作，其常量值为
                //android.intent.action.VIEW。然后通过Uri.parse()方法，将一个网址字符串解析成一个URi对象，再调用
                //Intent的setData()方法将这个Uri对象传递进去。其中Uri方法接受一个Uri对象，主要用于指定当前Intent正在操作
                //的数据，而这些数据通常都是以字符串的形式传入到Uri.parse()方法中解析产生的。
                //Intent intent = new Intent("com.example.administrator.activitytest.ACTION_START");
                //intent.addCategory("com.example.administrator.activitytest.MY_CATEGORY");
                //startActivity(intent);
                //Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                //startActivity(intent);
                /*Intent是Android程序中各组件之间进行交互的-种重要方式，它不仅可以指明当前组件想要执行的动作，还可以在不同组件之间传递数据。
                Intent 一般可被用于启动活动、启动服务以及发送广播等场景，由于服务、广^播等概念你暂时还未涉及，那么本章我们的目光无疑就锁定在了启动活动上面。
                Intent大致可以分为两种:显式Intent和隐式Intent, 我们先来看一下显式Intent如何使用。
                Intent有多个构造函数的重载，其中一个是Intent (Context packageContext, Class<?>cls)。
                这个构造函数接收两个参数，第一个参数Context要求提供一 个启动活动的上下文，
                第二个参数0Class则是指定想要启动的目标活动，通过这个构造函数就可以构建出Intent的“意图”。
                然后我们应该怎么使用这个Intent呢? Activity 类中提供了一一个startActivity()方法，
                这个方法是专门用于启动活动的，它接收一个Intent参数，这里我们将构建好的Intent传人startActivity()方法就可以启动目标活动了。*/

                //finish();//用于销毁活动，效果和按下Back键是一样的
                //Toast.makeText(FirstActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();
                //Toast的用法非常简单，通过静态方法makeText()创建出一个Toast对象，然后调用show()将Toast显示出来
                //就可以了。这里需要注意的是，makeText()方法需要传入3个参数。第一个参数是Context,也就是Toast要求
                //的上下文，由于活动本身就是一个Context对象，因此这里直接传入FirstActivity.this即可。第二个参数
                //Toast显示的文本内容，第三个参数是Toast显示的时长，有两个内置常量可以选择Toast.LENGTH_SHORT和
                // Toast.LENGTH_LONG

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
       /*通过gtenflater()方法能够得到MnuLnflater对象，再调用它的iflate()方法就可以给当前活动创建菜单了。
         iflate(方法接收两个参数，第一个参数用于指定我们通过哪一个资源文件来创建菜单，
         这里当然传人R. menu.main第二个参数用于指定我们的菜单项将添加到哪个Menu对象当中,
         这里直接使用onCreateOptionsMenu()方法中传人的menu参数。然后给这个方法返回true,
         表示允许创建的菜单显示出来，如果返回了false, 创建的菜单将无法显示。*/
    }

    @Override
        /*
        onActivityResulit()方法带有三个参数，第一个参数requestCode, 即我们在启动活动时传人的请求码。
        第二个参数resultCode即我们在返回数据时传人的处理结果。第三个参数data,即携带着返回数据的; Intent
        由于在一 个活动中有可能调用stiviyFofeslto方法去启动很多不同的活动，每一个活动返回的数据都会回调到
        onActivityResult()这个方法中，因此我们首先要做的就是通过检查requestCode的值来判断数据来源。
        确定数据是从SecondActivity返回的之后，.我们再通过resultCode的值来判断处理结果是否成功最后从data
        中取值并打印出来，这样就完成了向上一个活动返回数据的工作。

         */
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    String returnedData = data. getStringExtra("data_return");
                    Log.d("FirstActivity", returnedData) ;
                }
                break;
            default:

        }
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_item:
                Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_item:
                Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show();
                break;
                default:
        }
        return true;
        /*在 onOptionItemSelected()方法中，通过调用item.getItemId()来判断我们点击的是哪一个菜单项，然后
        给每个菜单项加入自己的逻辑处理，这里我们就活学活用，弹出一个刚刚学会的Toast*/
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("FirstActivity","onRestart");
    }
}
